// 有效的字母异位词：

class Solution {
public:
    bool isAnagram(string s, string t) 
    {
        if(s.size() != t.size())
            return false;

        // 统计每个字符的出现次数
        vector<int> table(26, 0);

        for(auto& c : s)
        {
            table[c - 'a']++;
        }

        for(auto& c : t)
        {
            table[c - 'a']--;

            if(table[c - 'a'] < 0)
                return false;
        }

        return true;
    }
};


class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) 
    {
        // vector<vector<string>> res;

        // // 建立字符串和相应字母异位词相同的字符串数组的映射
        // unordered_map<string, vector<string>> map;

        // // 统计string的各字母频次,以频次为key直接加入队列
        // for (string s : strs) 
        // {
        //     string sts = string(26, '0');
        //     for (auto c : s)  
        //         sts[c-'a']++;

        //     map[sts].push_back(s) ;
        // }

        // for (auto e : map)  
        //     res.push_back(e.second);

        // return res ;

        vector<vector<string>> res;

        // 建立字符串和相应的字母异位词数组的映射
        unordered_map<string, vector<string>> map;

        // 统计字符串各字母的出现次数
        for(string s : strs)
        {
            string str(26, '0');
            for(char c : s)
                str[c-'a']++;

            map[str].push_back(s);
        }

        for(auto e : map)
            res.push_back(e.second);

        return res;
    }
};



